// pages/sale-ticket-judge/sale-ticket-judge.js
const request = require('../../utils/request')
const util = require('../../utils/util')
const dateFormatter = require('../../utils/dateFormatter')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 核查列表数据
    checkList: [
    ],
    
    // 首次加载标志
    isFirstLoad: true,

    // 筛选相关
  startDate: "", // 开始日期 (后端使用完整 YYYY-MM-DD)
  endDate: "",   // 结束日期 (后端使用完整 YYYY-MM-DD)
  // 页面回显（不包含年份）
  startDateDisplay: '',
  endDateDisplay: '',
    dateOptions: ["当天", "昨天", "近三天", "近一周", "本月", "自定义"],
    selectedStatus: "全部状态",
    statusOptions: [{
        text: "全部状态",
        value: ""
      },
      {
        text: "待审核",
        value: "normal"
      },
      {
        text: "审核通过",
        value: "pass"
      },
      {
        text: "审核拒绝",
        value: "refuse"
      }
    ],
    searchKey: "",
    // 默认搜索待审核状态
    
    // 时间类型选择
    timeTypeOptions: [{
        text: "申请时间",
        value: "create"
      },
      {
        text: "审核时间",
        value: "audit"
      }
    ],
    timeTypeIndex: 0,
    timeTypeValue: 'create',
    timeTypeText: '申请时间',

    // 选择器状态
    showDatePicker: false,
    showStatusPicker: false,
    datePickerValue: [0], // 默认选中"当天"
    statusPickerValue: [0], // 默认选中"全部状态"
    statusIndex: 1, // 默认选中"待审核"
    statusPickerValue: 'normal', // 默认待审核
    statusText: '待审核',
    // 相机
    showCamera: false // 控制相机显示
    ,
    // 分页参数
    pageNo: 1,
    pageSize: 10,
    total: 0,
    loadingMore: false,
    // 预览相关
    showPreview: false,
    previewData: {}
  },
  // 将后端 status 映射为中文文案与颜色
  statusMap(status) {
    // support both textual status and numeric/string state values
    const sRaw = (status == null ? '' : String(status)).toLowerCase()
    // normalize common variants
    if (sRaw === '审核通过' || sRaw === 'pass' || sRaw === '1') return { text: '审核通过', color: '#07C160' }
    if (sRaw === '审核拒绝' || sRaw === 'refuse' || sRaw === '2') return { text: '审核拒绝', color: '#F44336' }
    // treat '0' or 'normal' or '待审核' or empty as pending
    return { text: '待审核', color: '#FFA000' }
  },

  // 扫描商家二维码
  scanMerchantQRCode() {
    wx.scanCode({
      onlyFromCamera: true,
      scanType: ['qrCode'],
      success: (res) => {
        console.log('扫描结果:', res.result)
        try {
          // 解析扫描结果 JSON
          const scanData = JSON.parse(res.result)
          if (scanData.id) {
            // 跳转到申报单页面，传递商户 id
            wx.navigateTo({
              url: `/pages/sale-ticket-apply/sale-ticket-apply?merchantId=${scanData.id}`
            })
          } else {
            wx.showToast({
              title: '二维码格式错误',
              icon: 'none'
            })
          }
        } catch (err) {
          console.error('解析二维码失败:', err)
          wx.showToast({
            title: '二维码格式错误',
            icon: 'none'
          })
        }
      },
      fail: (err) => {
        console.error('扫描失败:', err)
        wx.showToast({
          title: '扫描失败',
          icon: 'none'
        })
      }
    })
  },
  // 加载销售凭证申请列表（来自 /system/goods-sales-licens 接口）
  loadApplications(loadMore = false) {
    if (this.data.loadingMore) return

    const pageNo = loadMore ? this.data.pageNo + 1 : 1
    const pageSize = this.data.pageSize

    if (!loadMore) {
      wx.showLoading({ title: '加载中...' })
    } else {
      this.setData({ loadingMore: true })
    }
    // 构建搜索/筛选参数：客户名称（申报人名称）、状态、时间
    const params = { pageNo, pageSize }
    
    // 默认传入当前用户的商户 ID（从 role 接口获取）
    const merchantId = wx.getStorageSync('merchantId')
    if (merchantId) {
      params.myMerchantIds = merchantId
    }
    
    // 客户名称搜索（申报人名称）
    if (this.data.searchKey) {
      params.customerName = this.data.searchKey
    }
    
    // 状态筛选（传递后端值：normal/pass/refuse）
    if (this.data.statusPickerValue) {
      params.state = this.data.statusPickerValue
    }
    
    // 时间筛选（根据时间类型，传递时间范围）
    // 后端需要 createTime[0] 和 createTime[1] 的格式，使用 ISO 8601 格式（T分隔符）
    if (this.data.startDate || this.data.endDate) {
      const start = this.data.startDate || this.data.endDate // 如果只选了一个，用同一个日期
      const end = this.data.endDate || this.data.startDate
      
      try {
        // 构造完整的时间字符串，使用 T 作为日期和时间分隔符（ISO 8601格式）
        const startTime = `${start} 00:00:00`
        const endTime = `${end} 23:59:59`
        
        if (this.data.timeTypeValue === 'create') {
          // 申报时间：传递 createTime[0] 和 createTime[1]
          params['createTime[0]'] = startTime
          params['createTime[1]'] = endTime
        } else if (this.data.timeTypeValue === 'audit') {
          // 审核时间：传递 okDate[0] 和 okDate[1]
          params['okDate[0]'] = startTime
          params['okDate[1]'] = endTime
        }
      } catch (e) {
        console.error('日期解析失败:', e)
      }
    }

    return request.get('/admin-api/system/goods-sales-licens/page', params)
      .then(res => {
        if (!loadMore) wx.hideLoading()
        if (res.code === 0 && res.data) {
          // 支持 data.list 或 data 为数组
          const list = Array.isArray(res.data) ? res.data : (res.data.list || res.data.items || [])

          
          const total = res.data.total || res.data.totalCount || (Array.isArray(res.data) ? res.data.length : 0)

          const mapped = (list || []).map(item => {
            // backend returns `state` numeric string (e.g. '0') and createTime
            const map = this.statusMap(item.status || item.state);
            // 优先取商品明细数组的首项 prodName（兼容大小写与旧字段名）
            const detailsArr = item.goodsSalesLicensDetailSaveReqVOS || item.GoodsSalesLicensDetailSaveReqVO || item.details || item.list || [];
            const firstProdName = (detailsArr && detailsArr.length > 0)
              ? (detailsArr[0].prodName || detailsArr[0].name || detailsArr[0].goodsName || '')
              : (item.productName || item.prodName || '');

            return Object.assign({}, item, {
              merchantName: item.merchantName || item.merchant || item.shopName || '',
              customerName: item.customerName || '', // 申报人名称
              address: item.address || (item.merchant && item.merchant.address) || '',
              phone: item.phone || (item.merchant && item.merchant.phone) || '',
              // 申报时间使用 createTime（显示 YYYY年MM月DD日），审核时间使用 okDate（显示 YYYY年MM月DD日）
              arriveTime: dateFormatter.formatDateYMD(item.createTime) || item.createTime || '',
              judgeTime: dateFormatter.formatDateYMD(item.okDate) || item.okDate || '',
              statusText: map.text,
              statusColor: map.color,
              productName: firstProdName
            });
          })

          if (loadMore) {
            // 追加数据
            const newList = (this.data.checkList || []).concat(mapped)
            this.setData({ checkList: newList, pageNo, total, loadingMore: false })
          } else {
            // 覆盖数据
            this.setData({ checkList: mapped, pageNo, total })
          }
        } else {
          if (loadMore) this.setData({ loadingMore: false })
        }
      })
      .catch(err => {
        if (!loadMore) wx.hideLoading()
        else this.setData({ loadingMore: false })
        console.error('加载申请列表失败:', err)
        // propagate error so callers can handle (e.g. stopPullDownRefresh)
        return Promise.reject(err)
      })
  },

  // 客户名称输入变化（搜索申报人名称）
  onSearchChange(e) {
    const v = e.detail && e.detail.value ? e.detail.value.trim() : ''
    this.setData({ searchKey: v, pageNo: 1 })
    // 立即刷新列表，按客户名称搜索
    this.loadApplications(false).catch(() => {})
  },

  // 状态筛选变化
  onStatusChange(e) {
    const index = e.detail.value
    const selectedStatus = this.data.statusOptions[index]
    this.setData({ 
      statusIndex: index,
      statusPickerValue: selectedStatus.value,
      statusText: selectedStatus.text,
      pageNo: 1
    })
    this.loadApplications(false).catch(() => {})
  },

  // 时间类型选择变化
  onTimeTypeChange(e) {
    const index = e.detail.value
    const selectedTimeType = this.data.timeTypeOptions[index]
    this.setData({ 
      timeTypeIndex: index,
      timeTypeValue: selectedTimeType.value,
      timeTypeText: selectedTimeType.text,
      pageNo: 1
    })
    // 如果已选择日期范围，立即刷新列表
    if (this.data.startDate || this.data.endDate) {
      this.loadApplications(false).catch(() => {})
    }
  },

  // 开始日期选择
  startDateChange(e) {
    const value = e.detail && e.detail.value ? e.detail.value : ''
    // startDate 保留完整 YYYY-MM-DD 以便传给后端
    const display = dateFormatter.formatMonthDay(value)
    this.setData({ startDate: value, startDateDisplay: display, pageNo: 1 })
    // 如果结束日期已选择，立即刷新
    if (this.data.endDate || value) {
      this.loadApplications(false).catch(() => {})
    }
  },

  // 结束日期选择
  endDateChange(e) {
    const value = e.detail && e.detail.value ? e.detail.value : ''
    const display = dateFormatter.formatMonthDay(value)
    this.setData({ endDate: value, endDateDisplay: display, pageNo: 1 })
    // 如果开始日期已选择，立即刷新
    if (this.data.startDate || value) {
      this.loadApplications(false).catch(() => {})
    }
  },

  // 重置筛选条件并刷新列表（重置后保持待审核状态）
  onResetFilters() {
    this.setData({
      startDate: '',
      endDate: '',
      startDateDisplay: '',
      endDateDisplay: '',
      searchKey: '',
      statusPickerValue: 'normal', // 重置后默认待审核
      statusIndex: 1,
      statusText: '待审核',
      pageNo: 1
    })
    // 刷新列表
    this.loadApplications(false).catch(() => {})
  },
  // 跳转到审核详情页面
  navigateToDetail(e) {
    console.log(e)
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/sale-ticket-judge/sale-ticket-judge-detail?id=${id}`
    });
  },

  // 预览凭证
  previewDocument(e) {
    const item = e.currentTarget.dataset.item
    if (!item) return
    
    // 获取详情数据以便显示完整的商品列表
    wx.showLoading({ title: '加载中...' })
    request.get('/admin-api/system/goods-sales-licens/get?id=' + item.id)
      .then(res => {
        wx.hideLoading()
        if (res.code === 0 && res.data) {
          const detail = res.data
          
          // 格式化申报时间 (createTime)
          const createDateParts = dateFormatter.formatToYearMonthDay(detail.createTime)
          
          // 格式化开票时间 (审核时间 okDate)
          const okDateParts = dateFormatter.formatToYearMonthDay(detail.okDate)
          
          this.setData({
            previewData: {
              saleCode: detail.saleCode || item.saleCode || '',
              customerName: detail.customerName || item.customerName,
              address: detail.address || item.address || '',
              phone: detail.phone || item.phone || '',
              aboutOrder: detail.aboutOrder || '',
              products: detail.goodsSalesLicensDetailSaveReqVOS || [],
              isLicens: detail.isLicens || false,
              isCheck: detail.isCheck || false,
              createYear: createDateParts.year,
              createMonth: createDateParts.month,
              createDay: createDateParts.day,
              okYear: okDateParts.year,
              okMonth: okDateParts.month,
              okDay: okDateParts.day
            },
            showPreview: true
          })
        }
      })
      .catch(err => {
        wx.hideLoading()
        console.error('获取详情失败:', err)
        wx.showToast({ title: '加载失败', icon: 'none' })
      })
  },

  // 关闭预览
  closePreview() {
    this.setData({ showPreview: false })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 尝试加载后端真实申请列表并替换示例数据
    this.loadApplications(false)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 首次加载时跳过（已在 onLoad 中加载）
    if (this.data.isFirstLoad) {
      this.setData({ isFirstLoad: false })
      return
    }
    
    // 当从详情页或申报页返回时，列表需要刷新最新数据
    // 重置分页并加载第一页
    this.setData({ pageNo: 1 })
    this.loadApplications(false)
      .catch(() => {
        // 错误已在 loadApplications 中记录，这里无需重复处理
      })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 下拉刷新时重置到第一页并加载，完成后停止下拉刷新
    this.setData({ pageNo: 1 })
    this.loadApplications(false)
      .finally(() => {
        try { wx.stopPullDownRefresh() } catch (e) { /* ignore */ }
      })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 触底加载下一页（如果还有数据）
    const { pageNo, pageSize, total, loadingMore } = this.data
    if (loadingMore) return
    const currentCount = (this.data.checkList || []).length
    if (total && currentCount >= total) {
      // 已全部加载
      return
    }

    // 加载下一页
    this.loadApplications(true)
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})